/*
 * To change this template, choose Tools | Templates and open the template in the editor.
 */
package parser.part.n3;

/**
 *
 * @author Patronus This sentence would hold the main description for this doc
 *
 */
public class ConditionContainer extends ContainerAdapter {

    /**
     *
     * @param id
     */
    public ConditionContainer(String id) {
        this.setId(id);
        this.getWays().put(defaultParent, id);
        this.getWays().put(defaultNext, id);
    }

    /**
     * 
     * @param id is continer id
     * @param parent is parent id
     */
    public ConditionContainer(String id, String parent) {
        this.setId(id);
        this.getWays().put(defaultParent, parent);
        this.getWays().put(defaultNext, parent);
    }

    /**
     * 
     * @param id is continer id
     * @param parent is parent id
     * @param defaultNext is defaultNext id
     */
    public ConditionContainer(String id, String parent, String defaultNext) {
        this.setId(id);
        this.getWays().put(defaultParent, parent);
        this.getWays().put(defaultNext, defaultNext);
    }

    String getNext(Object e) {
        /*
         * первичные ключи
         */
        if (this.getWays().containsKey(true) && e != null) {/*
             * если обект содержит ключь true
             */
            return this.getWays().get(true);
        } else if (this.getWays().containsKey(false) && ((e == null) | (e.equals(false)))) {/*
             * если обект null либо false и таблица путей содержит ключь false
             */
            return this.getWays().get(false);
        }
        /*
         * вторичные ключи
         */
        if (this.getWays().get(e) != null) {
            return this.getWays().get(e);
        } else if (this.getWays().containsKey(defaultParent)) {
            System.out.println("No such keys");
            return this.getWays().get(defaultParent);
        }
        /*
         * ключей больше нету
         */
        System.out.println("No such keys; No Parent key");
        return this.getId();
    }
    /*бля.. переписывать все при изменении структуры.... я херею
 * надо поискать какойто приличный способ загнать обект в иксемель
 */

    @Override
    public String toString() {
        String s = "";
        {
            s += "<container ";

            s += "id='";
            s += this.getId();
            s += "' ";

            s += "condition='";
            s += this.getCondition();
            s += "'>\n";


            {
                s += "\t<rule ruleClass='";
                s += this.getRule().getClass().getCanonicalName();
                s += "' ";

                s += "ruleExpression='";
                s += this.getRule().expression;
                s += "' ";

                s += "id='";
                s += this.getRule().id;
                s += "'>\n";

                {
                    s += "\t\t<arguments>\n";
                    Object[] args = this.getRule().getArgs();

                    for (int i = 0; i < args.length; i++) {
                        if (args[i] != null) {
                            s += "\t\t\t<element position='";
                            s += i;
                            s += "' ";

                            s += "value='";
                            s += args[i];
                            s += "'>\n";

                        }
                    }
                    s += "\t\t<\\arguments>\n";
                }

                {
                    s += "\t\t<import>\n";

                    Object[][] imports = this.getRule().getImport();

                    for (int i = 0; i < imports.length; i++) {
                        if (imports[i][0] != null) {
                            s += "\t\t\t<element position='";
                            s += i;
                            s += "' ";

                            s += "value='";
                            s += imports[i][0];
                            s += "'>\n";
                        }
                    }
                    s += "\t\t<\\import>\n";
                }



                s += "\t<\\rule> \n";
            }
            s += "<\\container>\n";
        }
        return s;

    }
}
